package sunyu.toolkit.activemq;

import org.apache.activemq.pool.PooledConnection;
import org.slf4j.Logger;
import sunyu.toolkit.core.ExceptionKit;
import sunyu.toolkit.core.LogKit;

import javax.jms.*;

/**
 * 消息发送者
 *
 * @author 孙宇
 */
public class ActiveMQSenderTemplate {

    private static final Logger logger = LogKit.getLogger();

    private String name;
    private Session session;
    private MessageProducer producer;

    /**
     * 初始化生产者
     *
     * @param name       生产者名称
     * @param connection activeMQ连接
     * @param type       消息类型
     * @param subject    主题
     */
    public ActiveMQSenderTemplate(String name,
                                  PooledConnection connection,
                                  ActiveMQDestination type,
                                  String subject) {
        try {
            this.name = name;
            // 事务性会话，自动确认消息
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            // 消息的目的地（Queue/Topic）
            if (type.equals(ActiveMQDestination.Topic)) {
                Topic destination = session.createTopic(subject);
                producer = session.createProducer(destination);
            } else {
                Queue destination = session.createQueue(subject);
                producer = session.createProducer(destination);
            }
            // 不持久化消息
            //producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        } catch (Exception e) {
            logger.error(ExceptionKit.getStackTrace(e));
        }
    }

    /**
     * 获得生产者名称
     *
     * @return 生产者名称
     */
    public String getName() {
        return name;
    }

    /**
     * 获得生产者会话
     *
     * @return 生产者会话
     */
    public Session getSession() {
        return session;
    }

    /**
     * 发送消息
     *
     * @param message 消息
     */
    public void sendMessage(Message message) {
        try {
            producer.send(message);
        } catch (Exception e) {
            logger.error(ExceptionKit.getStackTrace(e));
        }
    }

}
